Batch Normalization

Purpose of Batch normalization

  • Batch normalization의 메인 아이디어는 보통의 Normalization과 같다.

Input을 normalize하는 목적이 학습이 잘되게 하는 것처럼, Hidden layers도 학습이 잘되게 normalize해주는 것이다. 굉장히 합리적이고, 상식적인 접근이다

Imgur

Imgur

  • 과정은 다음과 같다. $i$는 Batch normalization이 이루어지는 layer의 노드 갯수이다.

$$Z^{(i)}=\dfrac{z^{(i)}-\mu}{\sqrt[]{\sigma^{2}+\epsilon}},\qquad\text{where }\mu=\dfrac{1}{m}\sum_{i=1}z^{(i)},\text{ and }\sigma^{2}=\dfrac{1}{m}\sum_{i=1}(z_{i}-\mu)^{2}$$

  • $\epsilon$은 분산이 0으로 계산되는 경우 발생할 수 있는 오류를 방지하기 위해 존재하는 numerical stability장치이다.

저렇게 모든 층에 Batch normalization을 취하면 어떻게 될까? 아마도 모든 hidden layers의 노드들이 평균이 0이고 분산이 1인 분포를 따를 것이다. 이때 다음과 같은 learnable parameter를 정의하므로써, 각각의 hidden layers의 노드들이 다른 분포를 가지게 할 수 있다.

  • 새로운 변수 $\widetilde{Z^{l}}$를 다음과 같이 정의하자.

$$\widetilde{Z^{l}}=\gamma^{[l]}Z_{norm}^{l}+\beta^{[l]}$$

learnable paramter $\gamma$와 $\beta$는 각각의 layer마다 정의된다. 즉 새로운 $\widetilde{Z^{l}}$는 normalized된 값들을 scaling하고 shifting한 값으로써 저마다의 layer마다 고유한 값을 갖게 된다.

Q) 꼭 이렇게 layer마다 scale & location parameter를 지정할 필요가 있을까? 내 생각엔 그렇다.

=> 각 층의 W마다 수렴하는 속도가 다를 것이기 때문이다. nomalization의 애초 목적이 layer의 결과값을 학습이 잘 이루어지는 활성화 함수의 구간안으로 맞추는 것이기 때문이다. 반면에 학습이 빠르게 잘 된 W들은 더 움직이길 꺼릴 것이다. 이때는 학습이 잘 이루어지지 않는 활성화 함수의 구간으로 맞추어야 할 것이다.

Bias paramter will be canceled out

  • Bias paramter는 Hidden layer의 모든 노드에 똑같이 적용되므로 Batch normalization시 삭제되는 것은 당연하다. Bias parameter의 자리른 $\beta$가 대신하게 된다.

Additive effect of Bath normalization

  • mini-batch로 나눌 시 regularization의 효과가 살짝 나타난다.

Batch normalization의 궁극적인 의도는 아니지만, 큰 데이터를 mini-batch로 나눌 시 regularization효과가 나타날 수 있다.. (다시 생각해보니까 ... 왜그럴까?)

When test sample go to model?

  • training에서 구해진 $\beta$와 $\gamma$ 모수들을 사용한다. $\mu$와 $\sigma^2$는 mini-batch 평균들의 평균, 분산들의 평균을 사용한다.

Q) scale, location 모수는 그렇다쳐도, 왜 test set의 평균과 분산은 사용하지 않는 것일까?